{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Introduction to Probabilitic Graphical Models" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from IPython.display import Image" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Contents\n", "--------\n", "1. What is machine learning\n", "2. Different ways of learning from data\n", "3. Why probabilistic graphical models\n", "4. Major types of PGMs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1. What is machine learning\n", "Machine learning is a scientific discipline that explores the construction and study of algorithms that can learn from data. Such algorithms operate by building a model from example inputs and using that to make predictions or decisions, rather than following strictly static program instructions.\n", "\n", "We can take an example of predicting the type of flower based on the sepal length and width of the flower. Let's say we have some data (discretized iris data set on sepal length and width). The dataset looks something like this:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
lengthwidthtype
134632
148632
25530
48540
86731
............
79631
26530
101632
71631
119622
\n", "

150 rows × 3 columns

\n", "
" ], "text/plain": [ " length width type\n", "134 6 3 2\n", "148 6 3 2\n", "25 5 3 0\n", "48 5 4 0\n", "86 7 3 1\n", ".. ... ... ...\n", "79 6 3 1\n", "26 5 3 0\n", "101 6 3 2\n", "71 6 3 1\n", "119 6 2 2\n", "\n", "[150 rows x 3 columns]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%run ../scripts/1/discretize.py\n", "data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2. Different ways of learning from data\n", "\n", "Now let's say we want to predict the type of flower for a new given data point. There are multiple ways to solve this problem. We will consider these two ways in some detail: \n", "\n", "1. We could find a function which can directly map an input value to it's class label. \n", "2. We can find the probability distributions over the variables and then use this distribution to answer queries about the new data point.\n", "\n", "There are a lot of algorithms for finding a mapping function. For example linear regression tries to find a linear equation which explains the data. Support vector machine tries to find a plane which separates the data points. Decision Tree tries to find a set of simple greater than and less than equations to classify the data. Let's try to apply Decision Tree on this data set.\n", "\n", "We can plot the data and it looks something like this:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "# Adding a little bit of noise so that it's easier to visualize\n", "data_with_noise = data.iloc[:, :2] + np.random.normal(loc=0, scale=0.1, size=(150, 2))\n", "plt.scatter(data_with_noise.length, data_with_noise.width, c=[ \"bgr\"[k] for k in data.iloc[:,2] ], s=200, alpha=0.3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the plot we can easily see that the blue points are concentrated on the top-left corner, green ones in bottom left and red ones in top right. \n", "\n", "Now let's try to train a Decision Tree on this data." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0, 2, 0, 2, 2, 1, 2, 0, 0, 2, 2, 2, 2, 2, 0, 2, 0, 1, 2, 2, 2, 2,\n", " 2, 2, 2, 2, 2, 0, 0, 2])" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.tree import DecisionTreeClassifier\n", "from sklearn.model_selection import train_test_split\n", "\n", "X_train, X_test, y_train, y_test = train_test_split(data[['length', 'width']].values, data.type.values, test_size=0.2)\n", "\n", "classifier = DecisionTreeClassifier(max_depth=4)\n", "classifier.fit(X_train, y_train)\n", "classifier.predict(X_test)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.5666666666666667" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "classifier.score(X_test, y_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So, in this case we got a classification accuracy of 60 %.\n", "\n", "Now moving on to our second approach using a probabilistic model.\n", "The most obvious way to do this classification task would be to compute a Joint Probability Distribution over all these variables and then marginalize and reduce over these according to our new data point to get the probabilities of classes." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "X_train, X_test = data[:120], data[120:]" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
lengthwidthtype
134632
148632
25530
48540
86731
............
135832
6530
69621
139732
90631
\n", "

120 rows × 3 columns

\n", "
" ], "text/plain": [ " length width type\n", "134 6 3 2\n", "148 6 3 2\n", "25 5 3 0\n", "48 5 4 0\n", "86 7 3 1\n", ".. ... ... ...\n", "135 8 3 2\n", "6 5 3 0\n", "69 6 2 1\n", "139 7 3 2\n", "90 6 3 1\n", "\n", "[120 rows x 3 columns]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_train" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "length width type\n", "4 2 0 0.008333\n", " 3 0 0.033333\n", "5 2 1 0.033333\n", " 2 0.008333\n", " 3 0 0.191667\n", " 1 0.016667\n", " 4 0 0.141667\n", "6 2 1 0.075000\n", " 2 0.025000\n", " 3 1 0.225000\n", " 2 0.200000\n", " 4 0 0.041667\n", "7 2 2 0.008333\n", " 3 1 0.066667\n", " 2 0.116667\n", " 4 2 0.008333\n", "8 3 2 0.033333\n", " 4 2 0.016667\n", "dtype: float64" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Computing the joint probability distribution over the training data\n", "joint_prob = X_train.groupby(['length', 'width', 'type']).size() / 120\n", "joint_prob" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1, 1, 0, 2, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 2, 2, 1, 1, 1, 0,\n", " 1, 1, 1, 1, 0, 1, 1, 1])" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Predicting values\n", "\n", "# Selecting just the feature variables.\n", "X_test_features = X_test.iloc[:, :2].values\n", "X_test_actual_results = X_test.iloc[:, 2].values\n", "\n", "predicted_values = []\n", "for i in X_test_features:\n", " predicted_values.append(joint_prob[i[0], i[1]].idxmax())\n", " \n", "predicted_values = np.array(predicted_values)\n", "predicted_values" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ True, False, True, True, True, True, True, True, True,\n", " False, False, True, True, False, True, True, False, False,\n", " False, True, True, True, True, False, False, True, True,\n", " False, True, False])" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Comparing results with the actual data.\n", "predicted_values == X_test_actual_results" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.6333333333333333\n" ] } ], "source": [ "score = (predicted_values == X_test_actual_results).sum() / 30\n", "print(score)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "### Why Probabilistic Graphical Models\n", "\n", "In the previous example we saw how Bayesian Inference works. We construct a Joint Distribution over the data and then condition on the observed variable to compute the posterior distribution. And then we query on this posterior distribution to predict the values of new data points." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "But the problem with this method is that the Joint Probability Distribution is exponential to the number of states (cardinality) of each variable. So, for problems having a lot of features or having high cardinality of features, inference becomes a difficult task because of computational limitations. For example, for 10 random variables each having 10 states, the size of the Joint Distribution would be 10^10." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Proababilistic Graphical Models (PGM)__: PGM is a technique of compactly representing Joint Probability Distribution over random variables by exploiting the (conditional) independencies between the variables. PGM also provides us methods for efficiently doing inference over these joint distributions.\n", "\n", "Each graphical model is characterized by a graph structure (can be directed, undirected or both) and a set of parameters associated with each graph.\n", "\n", "The problem in the above example can be represented using a Bayesian Model (a type of graphical model) as:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPD/tweHBAAAAACC/r/2hBEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVgHccFm98S/9ywAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Image(filename='../images/1/Iris_BN.png')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this case the parameters of the network would be $P(L)$, $P(W)$ and $P(T | L, W)$. So, we will need to store 5 values for $L$, 3 values for $W$ and 45 values for $P(T | L, W)$. So, a total of 45 + 5 + 3 = 53 values to completely parameterize the network which is actually more than 45 values which we need for $P (T, L, W)$. But in the cases of bigger networks graphical models help in saving space. We can take the example of the student network shown below:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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CYBStCiQRTABUIoWBbIIJgBK0aJAFsEEQClaFMgimAAoRYsCWQQTAKVoUSCLYAKgFC0KZBFMAJSiRYEsggmAUrQokEUwAVCKFgWyCCYAStGiQBbBBEApWhTIIpgAKEWLAlkEEwClaFEgi2ACoBQtCmQRTACUokWBLIIJgFK0KJBFMAFQihYFsggmAErRokAWwQRAKVoUyCKYAChFiwJZBBMApWhRIItgAqAULQpkEUwAlKJFgSyCCYBStCiQRTABUIoWBbIIJgBK0aJAFsEEQClaFMgimAAoRYsCWQQTAKVoUSCLYAKgFC0KZBFMAJSiRYEsggmAUrQokEUwAVCKFgWyCCYAStGiQBbBBEApWhTIIpgAKEWLAlkEEwClaFEgi2ACoBQtCmQRTACUokWBLIIJgFK0KJBFMAFQihYFsggmAErRokAWwQRAKVoUyCKYAChFiwJZBBMApWhRIItgAqAULQpkEUwAlKJFgSyCCYBStCiQRTABUIoWBbIIJgBK0aJAFsEEQClaFMgimAAoRYsCWQQTAKVoUSCLYAKgFC0KZBFMAJSiRYEsggmAUrQokEUwAVCKFgWyCCYAStGiQBbBBEApWhTIIpgAKEWLAlkEEwClaFEgi2ACoBQtCmQRTACUokWBLIIJgFK0KJBFMAFQihYFsggmAErRokAWwQRAKVoUyCKYAChFiwJZBBMApWhRIItgAqAULQpkEUwAlKJFgSyCCYBStCiQRTABUIoWBbIIJgBK0aJAFsEEQClaFMgimAAoRYsCWQQTAKVoUSCLYAKgFC0KZBFMAJSiRYEsggmAUrQokEUwAVCKFgWyCCYAStGiQBbBBEApWhTIIpgAKEWLAlkEEwClaFEgi2ACoBQtCmQRTACUokWBLIIJgFK0KJBFMAFQihYFsggmAErRokAWwQRAKVoUyCKYAChFiwJZBBMApWhRIItgAqAULQpkEUwAlKJFgSyCCYBStCiQRTABUIoWBbIIJgBK0aJAFsEEQClaFMgimAAoRYsCWQQTAKVoUSCLYAKgFC0KZBFMAJSiRYEsggmAUrQokEUwAVCKFgWyCCYAStGiQBbBBEApWhTIIpgAKEWLAlkEEwClaFEgi2ACoBQtCmQRTACUokWBLIIJgFK0KJBFMAFQihYFsggmAErRokAWwQRAKVoUyCKYAChFiwJZBBMApWhRIItg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\n", "text/plain": [ "" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Image(filename='../images/1/student.png')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Considering that $D$ has cardinality of 2, $I$ has cardinality of 2, $S$ has cardinality of 2, $G$ has cardinality of 3 and $L$ has cardinality of 2. Also the parameters in this network would be $P(D)$, $P(I)$, $P(S | I)$, $P(G | D, I)$, $P(L | G)$. So, the number of values needed would be 2 for $P(D)$, 2 for $P(I)$, 12 for $P(G | D, I)$, 6 for $P(L | G)$, 4 for $P(S | I)$, total of 4 + 6 + 12 + 2 + 2 = 26 compared to 2 * 2 * 3 * 2 * 2 = 48 required for the Joint Distribution over all the variables. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Types of Graphical Models\n", "\n", "There are mainly 2 types of graphical models:\n", "\n", "1. Bayesian Models: A Bayesian Model consists of a directed graph and Conditional Probability Distributions(CPDs) associated with each of the node. Each CPD is of the form $P(node | parents(node))$ where $parents(node)$ are the parents of the node in the graph structure.\n", "\n", "2. Markov Models: A Markov Models consists of an undirected graph and are parameterized by Factors. Factors represent how much 2 or more variables agree with each other." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.10" } }, "nbformat": 4, "nbformat_minor": 1 }